const events = require("events");
const emitter = new events();





(`
【只监听一次事件 - once()】
    语法：emitter.once(eventName, listener)
    参数：
        - eventName: 字符串或Symbol，事件名称
        - listener: 函数，事件触发时执行的回调函数
    返回值：返回emitter实例，可链式调用
    作用：为指定事件注册一个只执行一次的监听器，执行后自动移除
`);
emitter.once('eventHandler', () => {
    console.log('once()：这个事件只会被触发一次');
});
emitter.emit('eventHandler'); // 触发事件
emitter.emit('eventHandler'); // 再次触发事件，不会执行





(`
【在监听器队列开头添加只执行一次的监听器】：prependOnceListener()
    语法：emitter.prependOnceListener(eventName, listener)
    参数：与once方法相同
    返回值：返回emitter实例，可链式调用
    作用：在监听器队列的开头添加一个只执行一次的监听器
`)
emitter.prependOnceListener('prependOnceListenerEvent', () => {
    console.log('prependOnceListenerEvent()：这个监听器会第一个执行且只执行一次');
});
emitter.emit('prependOnceListenerEvent'); // 触发事件
emitter.emit('prependOnceListenerEvent'); // 再次触发事件，不会执行





(`
【在监听器队列开头添加监听器 - prependListener()】
    语法：emitter.prependListener(eventName, listener)
    参数：与on方法相同
    返回值：返回emitter实例，可链式调用
    作用：在监听器队列的开头添加一个监听器（默认是添加在末尾）
    注意：事件触发时，监听器按照添加顺序执行
`);
emitter.prependListener('prependListenerEvent', () => {
    console.log('prependListenerEvent()：这个监听器会第一个执行');
});
emitter.emit('prependListenerEvent'); // 触发事件





(`
【移除所有监听器】：removeAllListeners()
    语法：emitter.removeAllListeners([eventName])
    参数：
        - eventName: 可选，字符串或Symbol，事件名称
    返回值：返回emitter实例，可链式调用
    作用：移除所有监听器，或指定事件的所有监听器
`);
emitter.removeAllListeners('prependOnceListenerEvent'); // 移除特定事件的所有监听器
console.log('已注册的事件:', emitter.eventNames());

emitter.removeAllListeners(); // 移除所有事件的所有监听器
console.log('已注册的事件:', emitter.eventNames());




